package com.gtworldmobile.json;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.gtworldmobile.entity.AsistenciaEvento;
import com.gtworldmobile.entity.Evento;
import com.gtworldmobile.entity.Imagen;
import com.gtworldmobile.entity.Poi;


import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;

public class JSONParser {
	
	private String URL_EVENTO= "";	
	private String EVENTO_SERVICES="GTWorld/services/com.gtworld.entity.evento/";
	private String URL_POI= "";
	private String POI_SERVICES="GTWorld/services/com.gtworld.entity.poi/";
	private String URL_COMENTAR="";
	private String COMENTAR_SERVICES="GTWorld/services/com.gtworld.entity.asistenciaevento/";
	private String URL_IMAGENES = "";
	private String IMAGENES_SERVICES="GTWorld/services/com.gtworld.entity.imagen/";
	public String ip_cargada="";
	

	
	private Activity activity;
	private JSONObject jObject;
	private Runnable runReadAndParseJSON;
	private List<Evento> listEvento;
	private List<Imagen> listImagenesPoi;
	private AsistenciaEvento editEvento=null;
	private Poi poi=null;
	
	
	private String parametro;
	private int peticion;
	public Thread thread;
	public String estatus;
	
	private static final int EVENTO = 0;
	private static final int IMAGENES_POI = 1;	
	private static final int EDITAR_EVENTO = 2;
	private static final int POI = 3;
	
	public JSONParser(Activity activity, String parametro, int peticion) {
		this.activity = activity;
		SharedPreferences prefs = this.activity.getSharedPreferences("preferencias",Context.MODE_PRIVATE);
		ip_cargada= prefs.getString("ip", "");
		
		URL_EVENTO=ip_cargada.concat(EVENTO_SERVICES);
		
		URL_POI=ip_cargada.concat(POI_SERVICES);
		
		URL_COMENTAR=ip_cargada.concat(COMENTAR_SERVICES);
		
		URL_IMAGENES=ip_cargada.concat(IMAGENES_SERVICES);
		
		this.parametro = parametro;
		this.peticion = peticion;
		
	}

	public void readAndParseJSON() throws JSONException {
		runReadAndParseJSON = new Runnable() {
			public void run() {
				try {
					switch(peticion){
						case (EVENTO):{

							listEvento = new ArrayList<Evento>();
							readJSONEvento();
							break;
						}
						case (IMAGENES_POI):{

							listImagenesPoi = new ArrayList<Imagen>();
							readJSONImagenesPoi();
							break;
						}
						case(EDITAR_EVENTO):{
							editEvento = new AsistenciaEvento();
							readJSONAsistenciaEvento();
							break;
						}
						case(POI):{
							poi = new Poi();
							readJSONPoi();
							break;
						}
					
					}
					
				} catch (Exception e) {
					estatus = e.getMessage();
					e.printStackTrace();
				}
			}
		};
		thread = new Thread(null, runReadAndParseJSON, "bgReadJSON");
		thread.start();
		
	}

	private void readJSONEvento() throws JSONException {
		System.out.println(URL_EVENTO+parametro);
		jObject = JSONManager.getJSONfromURL(URL_EVENTO+parametro,"evento");
		if (jObject != null) {			
			parseJSONEvento(jObject.getJSONArray("evento"));
		}
	}
	
	private void readJSONImagenesPoi() throws JSONException {
		jObject = JSONManager.getJSONfromURL(URL_IMAGENES+parametro,"imagen");		
		if (jObject != null) {			
			parseJSONImagenesPoi(jObject.getJSONArray("imagen"));
		}
	}
	
	private void readJSONAsistenciaEvento() throws JSONException {
		jObject = JSONManager.getJSONfromURL(URL_COMENTAR+parametro,"asistEvent");		
		if (jObject != null) {			
			parseJSONAsistEvent(jObject.getJSONArray("asistEvent"));
		}
	}
	
	private void readJSONPoi() throws JSONException {
		System.out.println(URL_POI+parametro);
		jObject = JSONManager.getJSONfromURL(URL_POI+parametro,"poi");
		if (jObject != null) {			
			parseJSONPoi(jObject.optJSONArray("poi"));
		}
	}

	private void parseJSONEvento(JSONArray jsonArray)
			throws JSONException {
		Evento evento;
		estatus="No hay eventos";
		for (int i = 0; i < jsonArray.length(); i++) {
			evento = new Evento();
			
			evento.setIdEvento(jsonArray.getJSONObject(i).getLong(
					"idEvento"));
			System.out.println(String.valueOf(evento.getIdEvento()));
			evento.setNombreEvento(jsonArray.getJSONObject(i).getString(
					"nombreEvento"));
			System.out.println(evento.getNombreEvento());
			evento.setFechaEvento(new Date(jsonArray.getJSONObject(i).getLong(
					"fechaEvento")));
			System.out.println(evento.getFechaEvento().toString());
			evento.setDescripcionEvento(jsonArray.getJSONObject(i).getString(
					"descripcionEvento"));
			System.out.println(evento.getDescripcionEvento());
			evento.setLocalEvento(jsonArray.getJSONObject(i).getString(
					"localEvento"));
			System.out.println(evento.getLocalEvento());
			evento.setPonenteEvento(jsonArray.getJSONObject(i).getString(
					"ponenteEvento"));
			System.out.println(evento.getPonenteEvento());
			evento.setEsPonenciaEvento(jsonArray.getJSONObject(i).getBoolean(
					"esPonenciaEvento"));
			System.out.println(evento.getEsPonenciaEvento());
			
			listEvento.add(evento);
			estatus="hay eventos para este POI";
		}

	}
	
	private void parseJSONImagenesPoi(JSONArray jsonArray)
			throws JSONException {
		System.out.println(jsonArray.toString());
		Imagen imagen;
		for (int i = 0; i < jsonArray.length(); i++) {
			imagen = new Imagen();
			imagen.setUrlImagen(jsonArray.getJSONObject(i).getString(
					"urlImagen"));
			listImagenesPoi.add(imagen);
			
		}

	}

	private void parseJSONAsistEvent(JSONArray jsonArray)
			throws JSONException {
		for (int i = 0; i < jsonArray.length(); i++) {
			editEvento.setComentarioAsistenciaEvento(jsonArray.getJSONObject(i).getString(
					"comentarioAsistenciaEvento"));
			estatus="comentario cargado";
		}

	}
	
	private void parseJSONPoi(JSONArray jsonArray)
			throws JSONException {
		
		for (int i = 0; i < jsonArray.length(); i++) {
			
			poi.setIdPoi(jsonArray.getJSONObject(i).getLong(
					"idPoi"));
			poi.setNombrePoi(jsonArray.getJSONObject(i).getString(
					"nombrePoi"));
			poi.setUrlWebPoi(jsonArray.getJSONObject(i).getString(
					"urlWebPoi"));
			poi.setDescripcionPoi(jsonArray.getJSONObject(i).getString(
					"descripcionPoi"));
			estatus="informacion de poi";
		}

	}

	public List<Evento> getListEvento(){
		return listEvento;
	}
	
	public List<Imagen> getListImagenesPoi(){
		return listImagenesPoi;
	}
	
	public Poi getPoi(){
		return poi;
	}
	
	public String getComentEvento(){
		return editEvento.getComentarioAsistenciaEvento();
	}
	
	public boolean alredyExistAsistencia(){
		return (editEvento!=null);
	}

}
